package com.bosssoft.hr.train.j2se.exception;

import lombok.extern.slf4j.Slf4j;

/**
 * @Class ExceptionDemo
 * @Description 其中包含两个方法： method1（）内部模拟try catch系统异常然后
 * 转化抛出 BusinessException 。 method2() 内部抛出 throw new Exception() main()
 * 调用method1 和 method2， 注意：是不是method2要求一定要catch，
 * @Author TangZaoBang
 * @Date 2023/04/27 12:39
 * @Version
 */
@Slf4j
public class ExceptionDemo {

    /**
     * method1（）内部模拟try catch系统异常然后 转化抛出 BusinessException 。
     * @author TangZaoBang
     * @date 2023/04/27 13:04
     * @return void 
     */
    public  void method1() {
        try {
            // 模拟系统异常
            int result = 1 / 0;
        } catch (Exception e) {
            // 转换为自定义异常并抛出
            throw new BusinessException(ExceptionCode.INVALID_PARAM,e);
        }
    }

    /**
     * method2() 内部抛出 throw new Exception()
     * @throws Exception
     */
    public  void method2() throws Exception {
        try{
            //留空
        }catch (Exception ex){
            // 和method1 一样抛出异常，这个方法后需要throws Exception
            throw new Exception(ex);
        }
    }
/**
 * 按作业要求测试异常
 * @author TangZaoBang
 * @date 2023/04/27 13:12
 * @param args 
 * @return void 
 */
    public static void main(String[] args) {
        ExceptionDemo exceptionDemo=new ExceptionDemo();


        try {
            // BusinessException从 RuntimeException继承 所以抛出异常不要求一定要捕获
            exceptionDemo.method1();
        } catch (BusinessException e) {
            // 捕获并输出自定义异常信息
            log.info("Caught BusinessException: " + e.getCode() + " - " + e.getMessage() + " - " + e.getCause());
        }

        try {
            exceptionDemo.method2();
            // 这个因为抛出 Exception异常所以需要捕获如果不做着要求main也要抛出异常,
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}